<?php
class ImageFunctions
{
    static $sImageSize = 200;
    static $mImageSize = 300;
    static $lImageSize = 800;
    /*
        Функция для загрузки изображения
        $image			элемент массива $_FILES['имя_поля']
        $imageName		имя, которое будет присвоено изображению
        $resize			параметр определяет, требуется ли изменять размер загружаемого изображения. Значение параметра указывает на размер изображения, по умолчанию FALSE
        $bigAndSmall	параметр определяет, требуется ли сохранять исходное изображение в том случае, когда изменяется его размер
    */
    static function loadImage($image, $imageName, $resize=FALSE, $bigAndSmall=FALSE)
    {
        //echo $image['tmp_name'];
        $result = $error = "";
        $imagePath = "images/";
        if ($image) {
            switch ($image['type']) {
                case 'image/pjpeg':
                case 'image/jpeg': $ext='.jpg';                break;
                case 'image/gif':  $ext='.gif';                break;
                case 'image/png':  $ext='.png';                break;
                case 'image/tiff': $ext='.tif';                break;
                default :          $ext='';                    break;
            }
            if ($ext){
                $result = self::cyrtolatin($imageName).$ext;
                move_uploaded_file($image['tmp_name'], $imagePath.$result);
                if ($resize){
                    if ($bigAndSmall){
                        self::resizeimage($imagePath.$result, $imagePath."small_".$result, $image['type'], self::$sImageSize);
                        self::resizeimage($imagePath.$result, $imagePath.$result, $image['type'], self::$lImageSize);
                    }
                    else{
                        self::resizeimage($imagePath.$result, $imagePath.$result, $image['type'], $resize);
                    }
                }
            }
            else $error = "Неприемлемый файл изображения";
        }
        else $error = "Загрузки изображения не произошло";
        $array = array('result'=>$result, 'error'=>$error);
        return $array;
    }

    static function resizeimage($savefrom, $saveto, $imagetype, $size)
    {
        $typeok = TRUE;

        switch ($imagetype)//выбор допустимого формата изображения и
            //сохранение в переменную $src
        {
            case "image/gif": $src = imagecreatefromgif($savefrom);            break;
            case "image/jpeg": $src = imagecreatefromjpeg($savefrom);          break;
            case "image/jpg": $src = imagecreatefromjpeg($savefrom);           break;
            case "image/pjpeg": $src = imagecreatefromjpeg($savefrom);         break;
            case "image/png": $src = imagecreatefrompng($savefrom);            break;
            default : $typeok = FALSE;            break;
        }

        if ($typeok)
        {
            list($w, $h) = getimagesize($savefrom);//сохранение размеров изображения в
            //массив
            $max = $size;//подгонка размеров изображения под 100 пикселов
            $tw = $w;
            $th = $h;

            if ($w > $h && $max < $w)
            {
                $th = $max / $w * $h;
                $tw = $max;
            }
            elseif ($h > $w && $max < $h)
            {
                $tw = $max / $h * $w;
                $th = $max;
            }
            elseif ($max < $w)
            {
                $tw = $th = $max;
            }

            $tmp = imagecreatetruecolor($tw, $th);//создание пустого изображения
            //с новыми размерами
            imagecopyresampled($tmp, $src, 0, 0, 0, 0, $tw, $th, $w, $h);//подгонка
            //размеров фотографии под пустое изображение
//            imageconvolution($src, array (
//                array (-1, -1, -1),
//                array (-1, -16, -1),
//                array (-1, -1, -1)
//            ), 8, 0);//улучшение резкости
            imagejpeg($tmp, $saveto);//сохранение изображения в переменную
            imagedestroy($tmp);//удаление временных изображений для освобождения
            //памяти
            imagedestroy($src);
        }
    }

    static function cyrtolatin ($string)
    {
        $cyrillic = explode(' ', "' а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я");
        $latin =    explode(' ', "q a b v g d e e z z i i k l m n o p r s t u f h c c s s j y j e u a A B V G D E E Z Z I I K L M N O P R S T U F H C C S S ' Y J E U A");
        for ($i=0; $i<66; ++$i)
        {
            $string = str_replace($cyrillic[$i], $latin[$i], $string);
        }
        return $string;
    }
}
